home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / SAT 2.3.8 / Demos / SAT Invaders demo ƒ / sMissile.c < prev    next >
Text File  |  1994-08-21  |  2KB  |  80 lines

  1. //• C translation from Pascal source file: sMissile.p
  2.  
  3. //• ===============================================.
  4. //• ================= Missile sprite unit ================.
  5. //• ===============================================.
  6.  
  7. //• Example file for Ingemars Sprite Animation Toolkit.
  8. //• © Ingemar Ragnemalm 1992.
  9. //• See doc files for legal terms for using this code.
  10.  
  11. //• sMissile;
  12.  
  13. //• Sprite unit. A sprite unit should include the following routines:
  14. //• Init-procedure, that Initializes private bitmaps.
  15. //• Setup-procedure, that sets variables other than the standard ones set by MakeSprite.
  16. //• Handle-procedure, to be called once per iteration until the sprite dies.
  17. //• Hittask-procedure (optional), for advanced collission handling.
  18.  
  19. //• Missile object for the SATInvaders sample game.
  20.  
  21. //• Prototypes, etc.
  22.  
  23. #include "SAT.h"
  24. #include "InvadeSAT.h"
  25. //• SoundConst, GameGlobals;
  26.  
  27.  
  28. short missileCount;     //• Exported since it has to be reset by SetUpLevel.
  29.  
  30. void InitMissile ();
  31. pascal void SetupMissile (SpritePtr sp);
  32. pascal void HandleMissile (SpritePtr me);
  33.  
  34.  
  35. enum {
  36.     missileSpeed = 10,
  37.     maxMissiles = 5
  38. };
  39.  
  40. static FacePtr missileFace;
  41.  
  42. void InitMissile ()
  43. {
  44.     missileFace = SATGetFace (136);
  45. }
  46.  
  47. pascal void SetupMissile (SpritePtr sp)
  48. {
  49.     sp->face = missileFace;
  50.     SetRect (&sp->hotRect, 3, 0, 13, 17);
  51.  
  52.     if (missileCount >= maxMissiles)
  53.         sp->task = 0L;     //• If too many, remove us immediately.
  54.     else
  55.         missileCount = missileCount++;
  56.     sp->task = &HandleMissile;
  57. }
  58.  
  59. pascal void HandleMissile (SpritePtr me)
  60. {
  61.     if (me->kind != -1)
  62.         {
  63.             me->task = 0L;
  64.             missileCount--;
  65.             SATSoundPlay (dunkH, 1, false);
  66.         }
  67.  
  68.     me->position.v = me->position.v + missileSpeed;
  69.  
  70.     if (me->position.v > gSAT.offSizeV)
  71.         {
  72.             me->task = 0L;
  73.             missileCount--;
  74.         }
  75. }
  76.  
  77.  
  78.  
  79.  
  80.